class Documenti::PreventiviController < DefaultController
  include ActionView::Helpers::NumberHelper
  require_role self.parent_name.underscore
  record_select
  #uses_tiny_mce
  active_scaffold :preventivo do |config|
    config.label = Application.controller_label(self)
    list.sorting = [{:data => 'DESC'}, {:numero => 'DESC'}]
    config.actions.add :field_search, :config_list, :export
    destinatario = [:partner, :contatto]
    contenuto = [:corpo_documento, :dettagli_preventivo, :chiusura_documento]
    columns = [:numero, :data] + destinatario + [:centro_costo, :tipo_documento, :oggetto, :annotazioni] + 
      contenuto + [:prezzo_totale_netto, :stato_documento, :data_inizio, :data_fine, :note_fatturazione, :user, :allegati]
    columns_list = [:numero, :data, :partner, :tipo_documento, :centro_costo, :oggetto, :prezzo_totale_netto, :stato_documento]
    
    ## visualizzazione colonne
    config.columns = config.list.columns = config.show.columns = config.update.columns = config.create.columns = config.field_search.columns = columns
    config.config_list.default_columns = columns_list
    config.create.columns.exclude :prezzo_totale_netto
    config.update.columns.exclude :prezzo_totale_netto
    
    ## configurazione colonne
    config.columns[:partner].update_column = :contatto
    config.columns[:contatto].form_ui = :select
    [:centro_costo, :tipo_documento,:stato_documento, :user].each { |i|
      config.columns[i].form_ui = :select
      config.columns[i].search_ui = :multi_select
    }
    config.columns[:data].form_ui = :calendar_date_select
    config.columns[:partner].form_ui = :record_select
    [:annotazioni, :note_fatturazione].each { |i| config.columns[i].options = SMALL_TEXTAREA }
    [:corpo_documento, :chiusura_documento].each { |i| config.columns[i].options = NOTE_TEXTAREA }
    [:prezzo_totale_netto].each { |i| config.columns[i].options[:format] = :currency }
    [:data, :centro_costo, :tipo_documento, :oggetto, :annotazioni, :stato_documento, :note_fatturazione,].each {
      |i| config.columns[i].inplace_edit = :ajax }
    config.columns[:oggetto].options[:size] = 80
    config.columns[:prezzo_totale_netto].description = "Totale IVA esclusa"
    config.columns[:partner].sort_by :sql => 'partners.ragione_sociale'
    config.columns[:stato_documento].sort_by :sql => 'stati_documento.name'
    config.columns[:centro_costo].sort_by :sql => 'centri_costo.name'
    #config.columns[:prezzo_totale_netto].calculate = :sum
    [:oggetto, :dettagli_preventivo, :allegati].each { |i| config.columns[i].search_ui = :text }
    config.columns[:dettagli_preventivo].search_sql = 'dettagli_preventivo.descrizione_lavoro'
    config.columns[:allegati].search_sql = 'allegati.name'
    config.columns[:user].label = "Autore documento"

    ## azioni
    config.columns[:centro_costo].clear_link
    config.columns[:numero].set_link('nested', :parameters => {:associations => :dettagli_preventivo})
    config.columns[:partner].set_link('show', :controller => 'anagrafiche/partners')
    config.action_links.add "Genera ODT", :action => 'generate_odt', :type => :member, :inline => false
    config.action_links.add "Note", :action => 'nested', :parameters => {:associations => :note}, :type => :member
    config.action_links.add "Allegati", :action => 'nested', :parameters => {:associations => :allegati}, :type => :member
    #config.action_links.add "Versioni", :action => 'nested', :parameters => {:associations => :versions}, :type => :member
  end

  def generate_odt
    @preventivo = Preventivo.find(params[:id])
    azienda = Partner.find("#{APP_CONFIG[:id_azienda]}")
    template = "#{RAILS_ROOT}/reports/preventivo.odt"
    report = ODFReport::Report.new(template) do |r|
      ##immagini
      carta_intestata = azienda.allegati.all(:conditions => { :name => 'carta_intestata'}).first.file_allegato.path
      firma_utente = @preventivo.user.firma.path(:medium)
      if (carta_intestata != nil): r.add_image :carta_intestata, carta_intestata end
      if (firma_utente != nil): r.add_image :firma_utente, firma_utente end
      ##dati documento
      r.add_field "NUMERO", @preventivo.numero
      r.add_field "ANNO", @preventivo.data.strftime('%Y')
      r.add_field "LUOGO", azienda.localita 
      r.add_field "DATA", I18n.l(@preventivo.data, :format => :long)
      ##destinatario
      r.add_field "RAGIONE_SOCIALE", @preventivo.partner.ragione_sociale
      r.add_field "INDIRIZZO", "#{@preventivo.partner.indirizzo}\n#{@preventivo.partner.cap} - #{@preventivo.partner.localita}"
      tel_fax_mail = ""
      if (@preventivo.partner.telefono != nil): tel_fax_mail += "tel: #{@preventivo.partner.telefono}" end
      if (@preventivo.partner.fax != nil): tel_fax_mail += "\nfax: #{@preventivo.partner.fax}" end
      if (@preventivo.partner.mail != nil): tel_fax_mail += "\nmail: #{@preventivo.partner.mail}" end
      r.add_field "TEL_FAX_MAIL", tel_fax_mail
      contatto = ""
      if (@preventivo.contatto != nil)
        contatto = "\nc.a. #{@preventivo.contatto.name}"
      end
        r.add_field "CONTATTO", contatto
      ##corpo documento
      r.add_field "OGGETTO", @preventivo.oggetto
      corpo_documento = "Seguito Vostra richiesta proponiamo di seguito il nostro miglior preventivo per i seguenti lavori."
      r.add_field "CORPO_DOCUMENTO", @preventivo.corpo_documento || corpo_documento
      ##dettagli preventivo
      @dettagli_preventivo = DettaglioPreventivo.all(:order => :position, :conditions => [ "preventivo_id = ?", @preventivo.id])
      r.add_section("DETTAGLI_PREVENTIVO", @dettagli_preventivo) do |s|
        s.add_field "LAVORO", :descrizione_lavoro
        s.add_field("PREZZO") { |dettaglio_preventivo| number_to_currency(dettaglio_preventivo.prezzo_netto) }
      end
      ##chiusura do documento
      chiusura_documento = "Rimanendo a disposizione per eventuali chiarimenti, cogliamo l'occasione per porgere i nostri più cordiali saluti."
      r.add_field "CHIUSURA_DOCUMENTO", @preventivo.chiusura_documento || chiusura_documento
      r.add_field "USER_FULLNAME", @preventivo.user.fullname
    end
    
    report_file_name = report.generate("tmp/preventivo.odt")
    send_file(report_file_name)
    #report.generate("result.odt")
  end

  def calcola_prezzo_totale(record)
    record.update_attributes(:prezzo_totale_netto => record.dettagli_preventivo.sum(:prezzo_netto))
  end
  def after_create_save(record)
    calcola_prezzo_totale(record)
  end
  def after_update_save(record)
    calcola_prezzo_totale(record)
  end
end
